package com.ithrima.activiti.day05;

import com.ithrima.activiti.day04.Holiday;
import org.activiti.engine.*;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;

import java.util.HashMap;

/**
 *  演示不加网关效果
 */
public class ExclusiveGateWayTest01 {

    // 任务交接
//    public static void main(String[] args) {
//        //1. 得到processEngine对象
//        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//        //2. 得到TaskService对象
//        TaskService taskService = processEngine.getTaskService();
//        //3. 查询任务
//        Task list = taskService.createTaskQuery()
//                .processDefinitionKey("myProcess_1").singleResult();
//
//        //4. 任务展示
//
//        if (list != null) {
//            // 归还任务
//            taskService.setAssignee(list.getId(),"zhangsan");
//        }
//
//
//
//    }


    // 归还组任务
//    public static void main(String[] args) {
//        //1. 得到processEngine对象
//        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//        //2. 得到TaskService对象
//        TaskService taskService = processEngine.getTaskService();
//        //3. 查询任务
//        Task list = taskService.createTaskQuery()
//                .processDefinitionKey("myProcess_1").taskAssignee("zhangsan").singleResult();
//
//        //4. 任务展示
//
//        if (list != null) {
//            // 归还任务
//            taskService.setAssignee(list.getId(),null);
//        }
//
//
//
//    }

    // 设置用户的执行人
//    public static void main(String[] args) {
//        //1. 得到processEngine对象
//        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//        //2. 得到TaskService对象
//        TaskService taskService = processEngine.getTaskService();
//        //3. 查询任务
//        List<Task> list = taskService.createTaskQuery()
//                .processDefinitionKey("myProcess_1").taskAssignee("llisi").list();
//
//        //4. 任务展示
//        for (Task task : list) {
//            System.out.println("流程实例ID:" + task.getProcessInstanceId());
//            System.out.println("任务ID:" + task.getId());
//            System.out.println("负责人:" + task.getAssignee());
//            System.out.println("描述信息:" + task.getDescription());
//            System.out.println("任务名称:" + task.getName());
//
//        }
//
//
//    }


    // 测试拾取组任务
    // 任务拾取  就是把任务的候选人转成任务的负责人
//    public static void main(String[] args) {
//        //1. 得到processEngine对象
//        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//        //2. 得到TaskService对象
//        TaskService taskService = processEngine.getTaskService();
//        //3. 查询任务
//        Task task = taskService.createTaskQuery()
//                .processDefinitionKey("myProcess_1").taskCandidateUser("zhangsan").singleResult();
//        //4. 任务展示
//
//        if (task != null) {
//            // 第一个为 任务id ，第二个参数 为候选人
//            taskService.claim(task.getId(),"zhangsan");
//            System.out.println("任务拾取完毕");
//        }
//
//
//    }
    // 查询任务
//    public static void main(String[] args) {
//        //1. 得到processEngine对象
//        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//        //2. 得到TaskService对象
//        TaskService taskService = processEngine.getTaskService();
//        //3. 根据流程定义的key，负责人assignee来实现当前用户的任务列表的查询
//        Task task = taskService.createTaskQuery()
//                .processDefinitionKey("myProcess_1").taskCandidateUser("llisi").singleResult();
//        //4. 任务展示
//
//        System.out.println("流程实例ID:" + task.getProcessInstanceId());
//        System.out.println("任务ID:" + task.getId());
//        System.out.println("负责人:" + task.getAssignee());
//        System.out.println("描述信息:" + task.getDescription());
//        System.out.println("任务名称:" + task.getName());
//
//
//    }

    // 完成任务
    public static void main(String[] args) {
        //1. 得到processEngine对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //2. 得到TaskService对象
        TaskService taskService = processEngine.getTaskService();
        //3. 根据流程定义的key，负责人assignee来实现当前用户的任务列表的查询
        Task task = taskService.createTaskQuery()
                .processDefinitionKey("holiday").taskAssignee("lisi").singleResult();
        //4. 执行任务
        taskService.complete(task.getId());



    }
    // 启动流程实例
//    public static void main(String[] args) {
//        //1. 得到processEngine对象
//        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//        //2. 得到RunService对象
//        RuntimeService runtimeService = processEngine.getRuntimeService();
//        //3. 创建流程对象
//        Holiday holiday = new Holiday();
//        holiday.setNum(5F);
//        HashMap<String, Object> stringObjectHashMap = new HashMap<>();
//        stringObjectHashMap.put("holiday",holiday);
//        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("holiday",stringObjectHashMap);
//        //4. 输出实例相关的信息
//        System.out.println("流程部署的ID"+processInstance.getDeploymentId());
//        System.out.println("部署流程ID"+processInstance.getProcessDefinitionId());
//        System.out.println("流程实例的ID"+processInstance.getId());
//        System.out.println("活动的ID"+processInstance.getActivityId());
//    }


    // 部署流程定义
//    public static void main(String[] args) {
//        // 1 创建 processEngine对象
//        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//        //2  得到RepositoryServer 实例
//        RepositoryService repositoryService = processEngine.getRepositoryService();
//        //3.进行部署
//        Deployment deploy = repositoryService.createDeployment()
//                .addClasspathResource("diagram/day05/holiday2.bpmn")
//               // .addClasspathResource("diagram/hello.png")
//                .name("请假流程6666")  // 设置流程名称
//                .deploy();
//        //4 输出部署信息
//        System.out.println(deploy.toString());
//    }
}
